package com.zm.oes.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zm.oes.entity.JudgeQuestion;
import org.apache.ibatis.annotations.*;

import java.util.List;

//判断题
@Mapper
public interface JudgeQuestionMapper {

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 根据作业ID (paperId) 查询该试卷中的所有判断题
     * 通过子查询从 paper_manage 表中选取符合条件的题目ID，然后在 judge_question 表中查询对应的判断题
     * 方法的参数为试卷ID，返回类型为判断题列表
     */
    @Select("select * from judge_question where questionId in " +
            "(select questionId from paper_manage where questionType = 3 and paperId = #{paperId})")
    List<JudgeQuestion> findByIdAndType(Integer paperId);

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 查询所有的判断题
     * 方法使用了分页功能，通过 Page 对象来指定页码和每页的记录数
     * 返回类型为 IPage<JudgeQuestion>，表示返回的结果是一个判断题的分页列表
     */
    @Select("select * from judge_question")
    IPage<JudgeQuestion> findAll(Page page);

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 查询 judge_question 表中最后一条记录的题目ID (questionId)
     * 返回类型为 JudgeQuestion，实际上返回的是最后一条记录的题目ID
     */
    @Select("select questionId from judge_question order by questionId desc limit 1")
    JudgeQuestion findOnlyQuestionId();

    /**
     * 使用 @Insert 注解标记，表示这是一个插入操作
     * 向 judge_question 表中插入一条新的判断题记录
     * 方法的参数为一个 JudgeQuestion 对象，包含了待插入的判断题信息
     */
    @Insert("insert into judge_question(subject,question,answer,analysis,level,section) values " +
            "(#{subject},#{question},#{answer},#{analysis},#{level},#{section})")
    int add(JudgeQuestion judgeQuestion);

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 根据科目 (subject) 查询符合条件的判断题
     * 查询结果按照随机顺序返回指定数量的题目ID
     * 方法的参数为科目和页面号，返回类型为题目ID列表
     */
    @Select("select questionId from judge_question  where subject=#{subject}  order by rand() desc limit #{pageNo}")
    List<Integer> findBySubject(@Param("subject") String subject, @Param("pageNo") Integer pageNo);

    /**
     * 使用 @Update 注解标记，表示这是一个更新操作
     * 根据题目ID (questionId) 更新 judge_question 表中对应的判断题信息
     * 方法的参数为一个 JudgeQuestion 对象，包含了待更新的判断题信息
     */
    @Update("update judge_question set subject = #{subject}, question = #{question}, " +
            "answer = #{answer}, section = #{section}, analysis = #{analysis}, level = #{level} w" +
            "here questionId = #{questionId}")
    int edit(JudgeQuestion judgeQuestion);
}
